package br.com.treinamento.gestaoExperienciaProfissional.validator;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.FacesValidator;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;

import br.com.treinamento.gestaoExperienciaProfissional.model.Usuario;
import br.com.treinamento.gestaoExperienciaProfissional.service.UsuarioService;
import br.com.treinamento.gestaoExperienciaProfissional.util.FacesUtil;

@FacesValidator("loginValidator")
public class LoginValidator implements Validator {

	@Override
	public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
		Integer idUsuario = (Integer) component.getAttributes().get("idUsuario");
		if (verificarLoginCadastrado(idUsuario, value.toString())) {
			gerarErro(value);
		}
	}

	private void gerarErro(Object value) {
		String mensagem = gerarMensagemErro(value.toString());
		FacesMessage msg = new FacesMessage(mensagem, mensagem);
		msg.setSeverity(FacesMessage.SEVERITY_ERROR);
		throw new ValidatorException(msg);
	}

	private boolean verificarLoginCadastrado(Integer idUsuario, String login) {
		UsuarioService usuarioService = new UsuarioService();
		Usuario usuario = usuarioService.buscarPorLogin(login.toString());
		return usuario != null && !usuario.getId().equals(idUsuario);
	}

	private String gerarMensagemErro(String login) {
		String mensagem = FacesUtil.getMessage("msg.oLogin");
		String mensagem2 = FacesUtil.getMessage("msg.jaFoiCadastrado");
		return mensagem + login + " " + mensagem2;
	}
}
